package com.ntd.study.base.thread;

import cn.hutool.core.lang.Console;
import ntd.util.UtilThread;

/**
 * 判断打印的 one or two
 * <p>
 * 1.非静态方法 - 对象锁
 * 2.静态方法 - class 锁
 * 3.某一个时刻内只能有一个线程持有锁,不管有几个方法
 */
public class DemoThreadLock1 {
    static Number number = new Number();

    public static void main(String[] args) {
        new Thread(() -> {
            number.one();
        }).start();
        new Thread(() -> {
            number.two();
        }).start();
        new Thread(() -> {
            number.three();
        }).start();
    }

    static class Number {
        public synchronized void one() { // 类锁
            UtilThread.sleep(2000);
            Console.log("one");
        }

        public static synchronized void two() { // 对象锁
            Console.log("two");
        }

        public void three() { // 无锁
            Console.log("three");
        }
    }
}

